Skip to main content

Backend

O código contido neste recorte do projeto contém o servidor web responsável por cumprir todas as user stories relacionadas às solicitações de remédios, existe também uma interface de mensageria responsável por garantir que os pedidos serão tratados de forma ordenada e assíncrona, além de uma serviço que serve de consumer desa fila kafka e armazena no banco de dados ( postgres ) as informações dos pedidos. Este projeto foi construído conforme as golang-standards 1. Ademais, também foi implementada, dado requisito de alta escalabilidade definido para o projeto, a arquitetura hexagonal 2

Dependências e Serviços

Antes de continuar, é necessário instalar as dependências e criar os serviços listados para a execução dos comandos posteriores. Para isso siga as seguintes instruções:

Como rodar o sistema

Siga as intruções abaixo para rodar o sistema junto a todos os seus recortes, simulação, mensageria, banco de dados e vicualização com o Metabase.

Definir as variáveis de ambiente:

Rode o comando abaixo e preencha com as respectivas variáveis de ambiente o arquivo .env criado.

Comando:

make env

Output:

================================================= START OF LOG ===================================================
Environment file created at ./.env
================================================== END OF LOG ====================================================
info

Criar infraestrutura local

Rode o comando abaixo para criar a infraestrutura necessária para o sistema localmente, os comandos para orquestrar os containers respectivos estão sendo abstraídos por um arquivo Makefile, para saber mais detalhes do comando abaixo acesse o link.

Comando:

make infra

Output:

================================================= START OF LOG ===================================================
[+] Running 6/6
✔ Network 2024-1b-t02-ec10-g04_default Created 0.0s
✔ Container zookeeper Started 0.1s
✔ Container redis Started 0.1s
✔ Container postgres Started 0.1s
✔ Container kafka Started 0.1s
✔ Container control-center Started 0.0s
Creating kafka topics...
Created topic orders.
================================================== END OF LOG ====================================================
info
  • O arquivo Docker Compose que é chamado pelo comando acima define um ambiente composto por diversos serviços. Inclui o Zookeeper para coordenação, Kafka para mensagens, Control Center para gerenciamento, PostgreSQL como banco de dados relacional e Redis como armazenamento em cache. Cada serviço é configurado com suas respectivas imagens, variáveis de ambiente e opções de rede. O Kafka, por exemplo, é configurado com detalhes como ID do broker, conexão com o Zookeeper e listeners para comunicação interna e externa. O PostgreSQL e o Redis são configurados com volumes para persistência de dados. Este arquivo proporciona um ambiente completo para desenvolvimento e execução de aplicativos que exigem sistemas de mensageria, banco de dados e armazenamento em cache.

Rodar o sistema:

Mais uma vez, todos os comandos necessários estão sendo abstraídos por um arquivo Makefile. Se você tiver curiosidade para saber o que o comando abaixo faz, basta conferir aqui.

Comando:

make run

Output:

================================================= START OF LOG ===================================================
[+] Running 8/8
✔ Network deployments_backend Created 0.1s
✔ Container deployments-server-3 Started 0.1s
✔ Container deployments-conductor-1 Started 0.1s
✔ Container deployments-server-1 Started 0.1s
✔ Container deployments-server-2 Started 0.1s
✔ Container deployments-conductor-2 Started 0.1s
✔ Container deployments-conductor-3 Started 0.1s
✔ Container nginx Started 0.0s
================================================== END OF LOG ====================================================
info
  • O arquivo Docker Compose que é chamado pelo comando acima configura três serviços: nginx, server e conductor. O serviço nginx utiliza a imagem mais recente do Nginx, mapeia a porta 80 do host para o contêiner, substitui a configuração padrão do Nginx com um arquivo personalizado e depende dos serviços "server" e "conductor". Os serviços "server" e "conductor" carregam variáveis de ambiente de um arquivo .env, reiniciam automaticamente, são construídos a partir de Dockerfiles específicos e são implantados com três réplicas cada. Todos os serviços estão conectados à rede "backend", que facilita a comunicação entre eles.

Demonstração do Sistema

A demonstração foi feita testando as rotas através do Swagger UI servido pelo serviço "server" na rota http://localhost/api/v1/docs/index.html#.

Demonstração

Footnotes

  1. A estrutura de pastas escolhida para este projeto está de acordo com as convenções e padrões utilizados pela comunidade de desenvolvedores Golang.

  2. As entidades, repositórios e use cases estão de acordo com os padrões previstos para a arquitetura hexagonal.